package com.kfm.spring.service.impl;

import cn.hutool.core.lang.tree.Tree;
import com.kfm.spring.domain.SysMenu;
import com.kfm.spring.domain.SysRole;
import com.kfm.spring.domain.TreeMenu;
import com.kfm.spring.mapper.SysMenuMapper;
import com.kfm.spring.service.IndexService;
import com.kfm.spring.service.SysMenuService;
import com.kfm.spring.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Service
public class IndexServiceImpl implements IndexService {

    @Autowired
    private SysRoleService sysRoleService;

    @Autowired
    private SysMenuService sysMenuService;

    @Override
    public Collection<TreeMenu> getMenuByUser(String id) {
        // 根据用户 id 查 角色信息
        List<SysRole> roleList = sysRoleService.findRoleByUser(id);

        Set<SysMenu> menus = new HashSet<>();
        // 根据角色信息 查 菜单
        for (SysRole sysRole : roleList){
            List<SysMenu> menuList = sysMenuService.findMenuByRole(sysRole.getId());

            menus.addAll(menuList);
        }
    /*
        学生管理
            children: 学生列表  添加学生
        用户管理
            children: 用户列表  添加用户
     */

        List<SysMenu> collect = menus.stream().sorted((o1, o2) -> o1.getSort() - o2.getSort()).collect(Collectors.toList());

        return tree(collect, 0);
    }

    @Override
    public List<Tree<Integer>> getMenuByUser2(String id) {
        // 根据用户 id 查 角色信息
        List<SysRole> roleList = sysRoleService.findRoleByUser(id);

        Set<SysMenu> menus = new HashSet<>();
        // 根据角色信息 查 菜单
        for (SysRole sysRole : roleList){
            List<SysMenu> menuList = sysMenuService.findMenuByRole(sysRole.getId());

            menus.addAll(menuList);
        }
    /*
        学生管理
            children: 学生列表  添加学生
        用户管理
            children: 用户列表  添加用户
     */

        List<SysMenu> collect = menus.stream().sorted((o1, o2) -> o1.getSort() - o2.getSort()).collect(Collectors.toList());

        return treeMenus(collect);
    }

    private List<TreeMenu> tree(List<SysMenu> list,Integer pid){
        return null;
    }

    private List<Tree<Integer>> treeMenus(List<SysMenu> list){


        return null;
    }
}
